package com.daikun.common.aop.annos;

import com.daikun.common.aop.handler.BaseLogHandler;

import java.lang.annotation.*;

/**
 * 日志注解
 * @author earl created 2025-07-07
 * @version init 0.0.1
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BaseLog {

    /** 日志前缀，输出日志时会在开头插入当前内容 */
    String value() default "";

    /** 入参是否在打印日志时进行截取 */
    boolean reqSub() default false;

    /** 若入参需要进行截取，保留的长度 */
    int reqSubLimit() default 512;

    /** 出参是否需要进行截取 */
    boolean resSub() default false;

    /** 若出参需要进行截取，保留的长度 */
    int resSubLimit() default 512;

    /** 若程序执行时抛出异常，是将异常抛出，还是返回 null，默认 true 继续将异常抛出 */
    boolean isThrow() default true;

    /** 入参需要进行脱敏的字段，可以有多个，英文逗号分割即可，tips -> 只会对对象的字段进行脱敏，基本类型的入参无法获取到形参名称，无法脱敏 */
    String reqRemark() default "";

    /** 出参需要进行脱敏的字段，可以有多个，英文逗号分割即可，tips -> 只会对对象的字段进行脱敏，基本类型的出参无法获取到形参名称，无法脱敏 */
    String resRemark() default "";

    /** 自定义入参和出参的截取规则，会覆盖 reqSubLimit 和 resSubLimit 的截取 */
    Class<? extends BaseLogHandler.SubHandler> subHandler() default BaseLogHandler.SubHandler.class;

}
